<?php

function subeNivel($con, $transaccion) {
    /* Funcion para subir de nivel */
    $nivelId = $_SESSION["niveId"];
    $partId = $_SESSION["partId"];
    $subtemaId = $_SESSION["subtemaId"];
    $genTeoricas = false;
    $genPractica = false;
    /* VERIFICA PRIMERO LAS RESPUESTAS A PREGUNTAS TEORICAS */
    $sql = "select evalDet.evaldetResultado from evaluacionesypruebas eval
            inner join evaluacionesypruebasdet evalDet on evalDet.evalId = eval.evalId
            inner join preguntas preg on preg.pregId = evalDet.pregId
            where eval.partId = '$partId' and eval.evalTipo = 'P' and preg.pregTipo = 'T' and preg.niveId = '$nivelId' order by evalDet.evaldetFec desc "; //quite limit 7
    $result = $con->consulta($sql);
    $conta = 0;
    $fila = 0;
    $cumpleTeoricas = false;
    while ($row = $con->unaFila($result)) {
        if ($row["evaldetResultado"] == "1"){
            $conta++;
            $fila ++;
        }else $fila = 0;
        if ($conta == 3 && $fila == 3 && !$cumpleTeoricas) {
            $cumpleTeoricas = true;
        }
    }
    if($conta >= 5) $genTeoricas = true;
    if (!$cumpleTeoricas)
        $cumpleTeoricas = ($conta >= 4) ? true : false;
//Si cumple con las preguntas Teoricas entra a evaluar las preguntas Practicas
    $sql = "select evalDet.evaldetResultado from evaluacionesypruebas eval
            inner join evaluacionesypruebasdet evalDet on evalDet.evalId = eval.evalId
            inner join preguntas preg on preg.pregId = evalDet.pregId
            where eval.partId = '$partId' and eval.evalTipo = 'P' and preg.pregTipo = 'P' and preg.niveId = '$nivelId' order by evalDet.evaldetFec desc "; //quite limit 7
    $result = $con->consulta($sql);
    $conta = 0;
    $fila = 0;
    $cumplePracticas = false;
    while ($row = $con->unaFila($result)) {
        if ($row["evaldetResultado"] == "1"){
            $conta++;
            $fila ++;
        }else $fila = 0;
        if ($conta == 3 && $fila == 3 && !$cumplePracticas) {
            $cumplePracticas = true;
        }
    }
    if($conta >= 5) $genPractica = true;
    
    if (!$cumplePracticas)
        $cumplePracticas = ($conta >= 4) ? true : false;
//Si cumple con los dos tipos de preguntas, se sube de nivel al participante
    if (($cumplePracticas && $cumpleTeoricas) || ($genTeoricas || $genPractica)) {
//valida que el nivel en que se encuentre no sea el maximo para el tema del participante
        $sql = "select tm.temaId from temas tm
                inner join subtemas sub on sub.temaId = tm.temaId where sub.subtemaId = '$subtemaId'";
        $result = $con->consulta($sql);
        $result = $con->unaFila($result);
//con el tema id consulta el maximo id del maximo nivel
        $temaId = $result["temaId"];
        $sql = "select max(niveId) from niveles where temaId = '$temaId'";
        $result = $con->consulta($sql);
        $result = $con->unaFila($result);
        if ($_SESSION["niveId"] == $result["niveId"]) { //Se trata del caso que el usuario ya se encuentra en el maximo nivel del sistema para el subtema
            return '1';
        } else {
//ubica cual es el nivel siguiente al tema que se encuentra el participante
            $sql = "select niveId from niveles where temaId = '$temaId' and niveId > '$nivelId' order by niveId asc limit 1";
            $result = $con->consulta($sql);
            $sigNivel = $con->unaFila($result);
            $_SESSION['niveId'] = $sigNivel["niveId"];
            $sql = "update participantes set niveId = '{$sigNivel["niveId"]}' where partId = '$partId'";
            $con->consulta($sql);
            cargaPreguntas($transaccion, $sigNivel["niveId"], $temaId, $con);
            return '0';
        }
    } else
        return '-1';
}

function sigPregunta($transaccion, $totalPreguntas, $con, $evalId) {
    /* Funcion para extraer otra pregunta de forma aleatoria */
    $sql = "select tempo.tempId from temporal tempo where transaccion = '$transaccion' and not exists(select * from evaluacionesypruebasdet evalDet where evalDet.evalId = '$evalId' and evalDet.pregId = tempo.tempInt2) ";
    $result = $con->consulta($sql);
    $preguntasNum = $con->numeroFilas($result) - 1;
    $tempId = "";
    if ($preguntasNum > 0) {
        $aleatorio = rand(0, $preguntasNum);
        $fila = 1;
        while ($row = $con->unaFila($result)) {
            $tempId = $row["tempId"];
            if ($fila == $aleatorio)
                break;
            $fila++;
        }
        return $tempId;
    }else { //no existen mas preguntas que mostrar, en este caso se repiten las preguntas
        $sql = "select tempId from temporal where transaccion = '$transaccion'";
        $result = $con->consulta($sql);
        $preguntasNum = $con->numeroFilas($result) - 1;
        $aleatorio = rand(1, $preguntasNum);
        $fila = 1;
        while ($row = $con->unaFila($result)) {
            $tempId = $row["tempId"];
            if ($fila == $aleatorio)
                break;
            $fila++;
        }
        return $tempId;
    }
}

function cargaPreguntas($transaccion, $nivelId, $temaId, $con) {
    /* Funcion para cargar la tabla temporal con todas las preguntas del tutor */
    $sql = "select pregId from preguntas where niveId = '$nivelId' and `temaId` = '$temaId' and `pregEstado` = 'A'";
    $result = $con->consulta($sql);
//elimina todas las posibles preguntas que ya existian
    $sql = "delete from temporal where transaccion = $transaccion";
    $con->consulta($sql);
//recorre las preguntas para insertarlas en la tamporal con el número de transaccion
    while ($preg = $con->unaFila($result)) {
        $sql = "insert into temporal(transaccion,tempInt1,tempInt2,tempVarchar1) values(";
        $sql .= "'$transaccion','$i','{$preg["pregId"]}','N')";
        $con->consulta($sql);
        $i++;
    }
    return;
}

//fin function cargaPreguntas($transaccion, $nivelId, $temaId,$con) {
?>
